package br.com.diego.system.view.action.usuario;

import br.com.diego.system.controller.cadastropermissao.CadastroPermissaoVo;
import br.com.diego.system.controller.cadastrousuario.UsuarioVo;
import br.com.diego.system.controller.consultausuario.ConsultaUsuarioBuilder;
import br.com.diego.system.controller.consultausuario.ConsultaUsuarioFactory;
import br.com.diego.system.controller.consultausuario.ConsultaUsuarioVo;
import br.com.diego.system.view.action.AbstractDiegoAction;
import br.com.diego.system.view.navigator.Navigator;
import br.com.diego.system.view.navigator.usuario.Pages;
import javax.faces.event.ActionEvent;
import org.springframework.beans.factory.annotation.Autowired;

public class ConsultaUsuarioAction extends AbstractDiegoAction {

    @Autowired
    private ConsultaUsuarioFactory consultaUsuarioFactory;
    
    @Autowired
    private ConsultaUsuarioBuilder consultaUsuarioBuilder;    
    
    @Autowired
    private CadastroUsuarioAction cadastroUsuarioAction = new CadastroUsuarioAction();
    
    @Autowired
    private AlterarSenhaAction alterarSenhaAction = new AlterarSenhaAction();
    
    private ConsultaUsuarioVo consultaUsuarioVo = new  ConsultaUsuarioVo();
    
    private UsuarioVo usuarioVo = new UsuarioVo();
    
    public void consultar(){
        try {
            consultaUsuarioVo.setUsuarioVoList(consultaUsuarioBuilder.consultar(consultaUsuarioVo));
            consultaUsuarioVo.setFiltro(null);
        } catch (IllegalArgumentException e) {
            setMensagem(e.getMessage());
        }
    }
    
    public void limpar() {
        consultaUsuarioVo = new ConsultaUsuarioVo();
    }
    
    public String redirecionar() {
        if (Navigator.getPage().equals(Pages.cadastroUsuario.name())) {
            carregarCadastroUsuario();
            Navigator.setPage("");
            return Pages.cadastroUsuario.name();            
        } else if (Navigator.getPage().equals(Pages.alterarSenha.name())) {
            carregarAlterarSenha();
            Navigator.setPage("");
            return Pages.alterarSenha.name();            
        } else {            
            return Pages.consultaUsuario.name();           
        }
    }   
    
    public void retornar(ActionEvent event) {
        usuarioVo = (UsuarioVo) event.getComponent().getAttributes().get("usuario");        
        usuarioVo = consultaUsuarioBuilder.retornar(usuarioVo);
    }

    public void carregarCadastroUsuario(){
        cadastroUsuarioAction.getCadastroUsuarioVo().setUsuarioVo(usuarioVo);
        cadastroUsuarioAction.getCadastroUsuarioVo().setConfirmacaoEmail(usuarioVo.getEmail());
        cadastroUsuarioAction.getCadastroUsuarioVo().setConfirmacaoSenha(usuarioVo.getSenha());
    }
    
    public void carregarAlterarSenha(){
        alterarSenhaAction.getAlterarSenhaVo().setUsuarioVo(usuarioVo);
    }   
    
    public ConsultaUsuarioVo getConsultaUsuarioVo() {
        return consultaUsuarioVo;
    }

    public void setConsultaUsuarioVo(ConsultaUsuarioVo consultaUsuarioVo) {
        this.consultaUsuarioVo = consultaUsuarioVo;
    }

    public UsuarioVo getUsuarioVo() {
        return usuarioVo;
    }

    public void setUsuarioVo(UsuarioVo usuarioVo) {
        this.usuarioVo = usuarioVo;
    }
   
}
